/*
 * main.c
 *
 *  Created on: 12.05.2012
 *      Author: Sebastian
 *
 */

/* std includes */
#include <stdio.h>
#include <string.h>

/* OSEK includes */
#include <kernel.h>
#include <kernel_id.h>

/* ECRobot includes */
#include "ecrobot_interface.h"
#include "network.h"
#include "network_debug.h"


//#define __SEND //Schalter zum Test der beiden Modi
#define __READ
#define TOP_LINE 1


/*--------------------------------------------------------------*/
/* OSEK declarations--------------------------------------------*/
/*--------------------------------------------------------------*/
DeclareTask(OSEK_backroundTask);
DeclareTask(OSEK_mainTask);
DeclareCounter(SysTimerCnt);

/*--------------------------------------------------------------*/
/* OSEK hook to be invoked from an ISR in category 2------------*/
/*--------------------------------------------------------------*/
void user_1ms_isr_type2(void) {
	StatusType errCode;

	errCode = SignalCounter(SysTimerCnt); // Increment OSEK Alarm Counter
	if (errCode != E_OK) {
		ShutdownOS(errCode);
	}
}

/*--------------------------------------------------------------*/
/* OSEK device initialization-----------------------------------*/
/*--------------------------------------------------------------*/
void ecrobot_device_initialize() {
	ecrobot_init_bt_slave("pod");
}

/*--------------------------------------------------------------*/
/* OSEK device termination--------------------------------------*/
/*--------------------------------------------------------------*/
void ecrobot_device_terminate(void) {
	ecrobot_term_bt_connection();
}

/*--------------------------------------------------------------*/
/* OSEK tasks---------------------------------------------------*/
/*--------------------------------------------------------------*/

TASK(OSEK_backroundTask) {
	debug(TOP_LINE, "working");
	nw_networker(); //Der Hintergrund dienst der laufen muss
	TerminateTask();
}

TASK(OSEK_mainTask) {
	nw_init(LKW); // Dein Team hier eintragen; siehe network.h

#if defined(__READ)
	user_msg readMsg;
#endif

	int running = 1;

	while (running) {
		//display_clear(1);

#ifdef __SEND
		display_goto_xy(0, 1);
		display_string("write :");
		//senden blockiert die gesammte kommunikation
		if (nw_send(HRL, "Test 01234567689+")) { // send(zu team, nachrricht mit max 16 zeichen)
			debug(TOP_LINE, "Nachricht im Ausgang");
			//Nachricht wurde erfolgreich in den Ausgang kopiert
		} else {
			debug(TOP_LINE, "Ausgang voll");
		}
		//running = 0;

#endif

#ifdef __READ
		//nw_networker();

		display_goto_xy(0, 1);
		display_string("read :");
		if (nw_read(&readMsg)) {
			// Eine Nachricht wurde empfangen

			display_goto_xy(0, 2);
			display_string(nw_teamTypeNames[readMsg.team]); //TEAM String mit 3 Zeichen
			display_string(" - Nr.: ");
			display_int(readMsg.team, 2); // ENUM mit der TEAM Nummer

			display_goto_xy(0, 3);
			display_string(readMsg.msg); // String mit 16 Zeichen
		} else {
			debug(TOP_LINE, "eingang leer");
		}
#endif
		display_update();
		systick_wait_ms(100);

	}

	// Wird nie erreicht, da running immer auf 1

	TerminateTask();
}
